iT邦幫忙

2024 iThome 鐵人賽

DAY 9
0

前言

在 Kubernetes 中,Deployment 和 ReplicaSet 是管理應用部署和運行的重要工具。這兩者的結合使得應用的高可用性和可擴展性得到了保障,同時也為應用的滾動更新和回滾提供了強大的支持。本篇文章將深入探討 Deployment 與 ReplicaSet 的工作原理、它們之間的關係,以及如何在實際場景中應用這些概念。

什麼是 Deployment?

Deployment 是 Kubernetes 中用來聲明和管理應用部署的控制器。通過 Deployment,你可以聲明應用應該如何運行(如副本數量、映像版本、更新策略等),Kubernetes 會自動達成這些期望狀態。這種聲明性的方法讓運維變得更簡單且更可靠,特別是在需要頻繁更新應用的情況下。

Deployment 的核心功能

在 Kubernetes 中,Deployment 使用聲明式的方式來管理應用。這意味著你只需要告訴 Kubernetes 你希望達到的狀態(例如應用需要運行 5 個副本),而 Kubernetes 會自動調整集群內的資源來實現這一目標。

  • 滾動更新:

    滾動更新是 Deployment 的一個重要功能,它允許你逐步替換運行中的應用版本,而不會造成服務中斷。例如,你可以逐步將舊版本的 Pod 替換為新版本的 Pod,確保在任何時間點都有足夠的副本在運行。

  • 回滾功能:

    當新版本的應用出現問題時,你可以輕鬆地將 Deployment 回滾到上一個穩定的版本。Kubernetes 會自動執行這一過程,恢復到更新前的狀態,從而降低了應用更新失敗的風險。

  • 擴展和縮減:

    你可以隨時通過修改 Deployment 來擴展或縮減應用的副本數量。Kubernetes 會自動調整 Pod 的數量,以滿足新的要求。這對於應對流量波動非常有用。

  • Deployment 的 YAML 配置範例

apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx-deployment
  labels:
    app: nginx
spec:
  replicas: 3
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - name: nginx
        image: nginx:1.14.2
        ports:
        - containerPort: 80
  strategy:
    type: RollingUpdate
    rollingUpdate:
      maxUnavailable: 1
      maxSurge: 1

深入理解 ReplicaSet

ReplicaSet 是 Kubernetes 中的一個控制器,用來確保指定數量的 Pod 在集群中運行。ReplicaSet 通常不會直接使用,而是由 Deployment 管理,負責維護 Deployment 的期望狀態。

https://ithelp.ithome.com.tw/upload/images/20240908/20140874vXdi4oplUA.png

  • 自動恢復:

當集群中的 Pod 因故障而終止時,ReplicaSet 會自動創建新的 Pod 來替代它們,以確保集群中運行的 Pod 數量始終與設定的期望值一致。

  • 與 Deployment 的協作:

每當 Deployment 發布或更新時,Kubernetes 會創建或更新對應的 ReplicaSet。ReplicaSet 會持續監控 Pod 的運行情況,並根據需求增減 Pod 數量,以達到 Deployment 設定的目標。

  • ReplicaSet 的 YAML 配置範例

    apiVersion: apps/v1
    kind: ReplicaSet
    metadata:
      name: nginx-replicaset
      labels:
        app: nginx
    spec:
      replicas: 3
      selector:
        matchLabels:
          app: nginx
      template:
        metadata:
          labels:
            app: nginx
        spec:
          containers:
          - name: nginx
            image: nginx:1.14.2
            ports:
            - containerPort: 80
    

Deployment 與 ReplicaSet 的實際應用場景

  • 零停機更新:

    在生產環境中,應用的更新過程可能會影響到用戶體驗。通過 Deployment 的滾動更新功能,可以在不停止服務的情況下逐步替換應用版本,這對於線上服務至關重要。

  • 自動擴展與縮減:

    隨著應用流量的波動,可能需要動態調整應用的副本數量。Kubernetes 的 Horizontal Pod Autoscaler(HPA)可以與 Deployment 配合使用,自動調整 ReplicaSet 的副本數量,以應對高峰流量。

  • 多版本管理:

    當你需要同時運行多個版本的應用以進行 A/B 測試時,可以使用多個 Deployment 來管理這些版本。每個 Deployment 都會創建相應的 ReplicaSet,確保不同版本的應用同時運行並接收流量。

  • 資源配額管理:

    為了防止某個 Deployment 佔用過多的資源,影響其他應用的運行,你可以設置資源配額(Resource Quotas)來限制每個 Deployment 的資源使用量。

◆ 每日咒術小知識

https://ithelp.ithome.com.tw/upload/images/20240908/20140874zCMa3cNmYS.jpg

參考資料

https://kubernetes.io/zh-cn/docs/concepts/workloads/controllers/deployment/

https://medium.com/andy-blog/kubernetes-%E9%82%A3%E4%BA%9B%E4%BA%8B-deployment-%E8%88%87-replicaset-%E4%B8%80-406234a63d43


上一篇
第八篇: 打開帳: Service
下一篇
第十篇: NetworkPolicy 與 Namespace
系列文
成為 Kubernetes 特級咒術師的 30 天修行26
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言